TIBDatabase,TIBDataSet - dynamicke vytvorenie

Otázka od: KALUS Jozef

3. 12. 2002 10:08

nazdar,

uz som s tym stravil cele dva vecery a akosi neviem z toho von, zatial
sa len pokusam preluskat veci co ostatni tu na konfere maju davno
zvladnute ale hladal som v helpe, examploch, knihach... a nepohol som sa
dopredu, preto sa ospravedlnujem za dlhsi obsah.

Mam takyto problem:

potrebujem si dynamicky creatnut konekty na db s datasetmi, konkretne
mam problem pri rekurzii, kde naplnam Tree. Ide mi o to, ze ked niekde
zavriem TIBDataSet, tak ked sa vratim mam ho uz uzavrety. To je
sposobene tym, ze pouzivam komponentu na forme (to mi tiez chvilu trvalo
kym som na to prisiel). Takze by som si potreboval pre kazde zavolanie
rekurzivnej funkcie dynamicky vytvorit objekt typu TIBDataSet (iny
select) aby mal platnost v tejto funkcii a neovplyvnoval chod
nadradenych fci.

Aby som sa vyhol komponentam na forme chcem si dynamicky vytvorit aj
objekt TIBDatabase.
S komponentami mi konekty funguju ale nie je to co potrebujem.

Moj kus kodu co som zosmolil (db je typu TIBDatabase, dsdb_trans je
komponenta, disp vypise iba spravu):

    db:=TIBDatabase.Create(dsdb);
    db.DatabaseName:='kalus_nt:/dsdb/dsdb.gdb';
    db.Params.create;
    db.Params.Clear;
    db.Name:='dsdb2';
    db.SQLDialect:=3;
    db.params.Add('user_name=sysdba');
    db.params.Add('password=masterkey');
    db.DefaultTransaction:=dsdb_trans;
    disp('Conn');
    db.Connected:=True;
    disp('OK Conn On');
    db.Connected:=False;
    disp('OK Conn Off');

Otazky:
1. co sa dava do db:=TIBDatabase.Create(AOwner:TComponent); - aky
vlastnik ??? nil?,self? alebo nieco ine ? akosi sa to nemozem nikde
docitat (v helpe ziadny exampel   ).
2. db.Connected:=True; mi hodi vynimku
"Operation cancelled at user's
request." a neviem preco, mozno ze to vyplyva z
bodu 1
3. ked toto pojde ake zaludnosti ma cakaju pri
db_dataset:=TIBDataSet.Create(?) ???

staci mi odkaz na exampel kde to je alebo na inet

prosim dlhsie maily priamo na mna mailto:jozef.kalus@spordat.sk -
nechcem drazdit admina uz aj toto je dost  

dakujem za vsetky informacie...


joka
------------------------------------------------------------------------
Ing. Jozef Kalus
Ľ. Štúra 17/28
018 61 BELUŠA

Mob.: +421 905 459156
e-mail: equipment@equipment.sk
        jozef.kalus@spordat.sk
web: http://www.equipment.sk

Odpovedá: Jan Sebelík

3. 12. 2002 13:05

> Odesílatel: KALUS Jozef <jozef.kalus@spordat.sk>
> Předmět: TIBDatabase,TIBDataSet - dynamicke vytvorenie

Nevim, zda jsem pochopil dobre tvuj problem, ale myslim, ze nepotrebujes
dynamicky vytvaret TIBDatabase, jenom TIBDataSet, ktery napojis na uz
existujici databazi. Naopak bys mozna mel pro tento dataset dynamicky vytvorit
transakci.

> db:=TIBDatabase.Create(nil);
> try
> db.DatabaseName:='kalus_nt:/dsdb/dsdb.gdb';
> db.params.Values['user_name']='sysdba';
> db.params.Values['password']:='masterkey';
> db.params.Values['charset']:='Win1250';
// to charset se jmenuje nejak jinak, nevzpomenu si...
> db.LoginPrompt:=false; // aby se to pripojilo bez prihlaseni
> db.DefaultTransaction:=dsdb_trans; // ??? to je otazka, spise specialni
transakce
> disp('Conn');
> db.Connected:=True;
> disp('OK Conn On');
> db.Connected:=False;
> disp('OK Conn Off');
> finally
> db.Free;
> end;

Stejne to bude s IBDataSet, proste mu priradis property Database na tuhle
databazi (nebo spise na nejakou uz vytvorenou a "connect-nutou" v ramci
aplikace). A asi property Transaction na nejakou specialni (treba taky
dynamicky vytvorenou) transakci, kterou "commit-nes" po skonceni prace s
datasetem.

> Otazky:
> 1. co sa dava do db:=TIBDatabase.Create(AOwner:TComponent); - aky
> vlastnik ??? nil?,self? alebo nieco ine ? akosi sa to nemozem nikde
> docitat (v helpe ziadny exampel   ).
Owner je komponenta, ktera zodpovida za to, ze pri svem zaniku uvolni (Free)
vsechny komponenty, ktere vlastni.
Pokud neco vytvarim docasne (lokalni objekt v procedure), zpravidla davam
Create(nil), protoze to pak stejne musim sam uvolnit (finally Free).

> 2. db.Connected:=True; mi hodi vynimku
"Operation cancelled at user's
> request." a neviem preco, mozno ze to vyplyva
z bodu 1
Spise by to mel byt ten LoginPrompt.

> 3. ked toto pojde ake zaludnosti ma cakaju pri
> db_dataset:=TIBDataSet.Create(?) ???
Zadne zaludnosti  
Proste v runtime nastavis totez, co bezne delas v designtime  
Akorat si musis objekt sam vytvorit a taky finally zrusit.

Honza
Viz kurz "Delphi: pokrocile techniky, databazovy klient", 9.12.2002
=========================================
= HAES - RNDr. Jan Sebelik
= http://www.haes.cz
= Skolici a konzultacni stredisko pro Delphi a Win32
= Vojtiskova 206
= 507 81 Lazne Belohrad
= tel. 493 792 931 (mobil 776 347735)
=========================================